package com.etsii.android.cliente;

import com.etsii.android.cliente.Semaforo.*;

// Clase Variables Condicion implementada mediante semaforos Fifo.
// Metodos: Wait y Signal
// Fecha: Noviembre 2005

public class cond_sx {
  private int num_proc; // Numero de procesos esperando en variable condicion
  private Semaforo s; // Semaforo para parar a los procesos.
  private monitor_sx m; // enlace con el monitor que esta conectado
  
  // Constructor
  public cond_sx(monitor_sx m) {
    num_proc = 0;
    s = new Semaforo(0);
    this.m = m;
  } // Constructor

  // Operacion Wait
  public void Wait() {
    num_proc++;
    m.unlock();
    s.Wait();
    m.locksx();
  } // Wait

  // Operacion Signal
  public void Signal() {
    if (num_proc > 0) {
      num_proc--;
      m.setsx(true);
      s.Signal();
    } // if 
  } // Signal
} // cond_sx
